package com.zoro.dyformservice.utils;

import java.util.Map;
import java.util.function.Function;

public class MapUtil {

    /**
     * @param key          key
     * @param map          map
     * @param transform    值的转换方法
     * @param defaultValue 当map为空， key 值不存在，key 对应的值为null 时 的默认值
     * @param <K>          map 的 key 的类型
     * @param <V>          map 的 value 的类型
     * @param <TV>         转换后的值的类型
     * @return
     */
    @SuppressWarnings("all")
    public static <K, V, TV> TV get(K key, Map<K, V> map, Function<V, TV> transform, TV defaultValue) {
        if (map == null || map.isEmpty()) {
            return defaultValue;
        }

        V value = map.get(key);
        if (value == null) {
            return defaultValue;
        }
        if (transform != null) {
            return transform.apply(value);
        } else {
            return (TV) value;
        }
    }

    public static <K, V> V get(K key, Map<K, V> map, V defaultValue) {
        return get(key, map, v -> v, defaultValue);
    }

    public static <K, V> V get(K key, Map<K, V> map) {
        return get(key, map, v -> v, null);
    }
}
